package cn.zhizihua.filter;


import cn.zhizihua.vo.ResultBean;
import com.fasterxml.jackson.databind.ObjectMapper;

import javax.servlet.FilterChain;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.annotation.WebFilter;
import javax.servlet.http.HttpFilter;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;

/** 跨域校验
 * 过滤器 Filter
 * Web项目都可以使用
 *  @WebFilter("要拦截的路径")
 */

@WebFilter("/*")  //所有请求都要经过这个校验    SpringMVC的@CrossOrigin跨域注解没有使用 采用了过滤器的形式
public class CrosFilter extends HttpFilter {
    @Override
    public void doFilter(ServletRequest req, ServletResponse res, FilterChain chain) throws IOException, ServletException {
        System.out.println("------跨域设置-------");

        HttpServletResponse response = (HttpServletResponse) res;

        //获取前端的访问路径
        String origin = ((HttpServletRequest) req).getHeader("Origin");
        System.out.println("origin----"+origin);

        //注意：这里设置只允许http://localhost:8081进行跨域访问
        response.setHeader("Access-Control-Allow-Origin", origin);
        response.setHeader("Access-Control-Allow-Credentials", "true");
        response.setHeader("Access-Control-Allow-Methods", "POST, GET, OPTIONS, DELETE, PUT, PATCH");
        response.setHeader("Access-Control-Max-Age", "3628800");
        response.setHeader("Access-Control-Allow-Headers", "x-requested-with,Authorization,content-type");

        //放行
        chain.doFilter(req,res);



//        if (origin == null ||
//                origin.contains("http://localhost:8888") ||
//                origin.contains("http://localhost:9999")){
//            //注意：这里设置只允许http://localhost:8081进行跨域访问
//            response.setHeader("Access-Control-Allow-Origin", origin);
//            response.setHeader("Access-Control-Allow-Credentials", "true");
//            response.setHeader("Access-Control-Allow-Methods", "POST, GET, OPTIONS, DELETE, PUT, PATCH");
//            response.setHeader("Access-Control-Max-Age", "3628800");
//            response.setHeader("Access-Control-Allow-Headers", "x-requested-with,Authorization,content-type");
//
//            //放行
//            chain.doFilter(req,res);
//
//        } else{
//
//            response.setContentType("application/json;charset=UTF-8");
//            ObjectMapper objectMapper = new ObjectMapper();
//            String json = objectMapper.writeValueAsString(ResultBean.ERROR("不允许跨域访问"));
//            response.getWriter().write(json);
//
//        }
    }
}
